/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
//Essa classe precisa receber o resultado da fuzzificação dos valores de entrada dos sensores.
//A partir dos dados fuzzificados será inferida alguma das regras do controlador fuzzy.
package controladorfuzzy;;

import java.util.ArrayList;

/**
 *
 * @author Administrador
 */
public class Inferencia {

    String valorSaida;
    ArrayList<Expressao> expressoes;
    ConjuntoRegras regras = new ConjuntoRegras();

    public Inferencia(ArrayList<Expressao> expressoesRecebidas) {
        this.expressoes = expressoesRecebidas;
    }

    public ArrayList<Expressao> ativarRegras() {
        double menorPertinencia = 2;
        for (int i = 0; i < expressoes.size(); i++) {
            if (expressoes.get(i).getAntecedente1Pertinencia() < menorPertinencia) {
                menorPertinencia = expressoes.get(i).getAntecedente1Pertinencia();
            }
            if (expressoes.get(i).getAntecedente2Pertinencia() < menorPertinencia) {
                menorPertinencia = expressoes.get(i).getAntecedente2Pertinencia();
            }
            if (expressoes.get(i).getAntecedente2Pertinencia() < menorPertinencia) {
                menorPertinencia = expressoes.get(i).getAntecedente2Pertinencia();
            }

            expressoes.get(i).setConsequentePertinencia(menorPertinencia);
            String consequente = regras.obterValorSaida(expressoes.get(i).getAntecedente1valor(), expressoes.get(i).getAntecedente2Valor(), expressoes.get(i).getAntecedente3Valor());
            expressoes.get(i).setConsequenteValor(consequente);
        }
        imprimirExpressoes();
        if(expressoes.contains("x"))
            System.out.println("tem o x");
        return expressoes;
    }

    public void imprimirExpressoes() {
        System.out.println("");
        System.out.println("------------");
        System.out.println("Imprimindo expressões após o processo de inferência ");
        for (int i = 0; i < expressoes.size(); i++) {
            System.out.println(expressoes.get(i).getAntecedente1Pertinencia() + " " + expressoes.get(i).getAntecedente1valor()
                    + " E " + expressoes.get(i).getAntecedente2Pertinencia() + " " + expressoes.get(i).getAntecedente2Valor()
                    + " E " + expressoes.get(i).getAntecedente3Pertinencia() + " " + expressoes.get(i).getAntecedente3Valor()
                    + " Então " + expressoes.get(i).getConsequentePertinencia() + " " + expressoes.get(i).getConsequenteValor());
        }
    }
}
